# -*- coding: utf-8 -*-
"""
File Name: 运算符的使用.py

@author: lengf
@date: 2025-04-13
@email: lengfo@163.com
@version: 1.0.0
"""

# 运算符优先级从高到低：

# 1. 圆括号 ：()
   # 这种括号可以用来改变运算顺序， 也可以用来分组。
print('加括号' ,(1-2+5)*3)       # 计算结果为 12


# 2. 下标 和切片：[]  [:]
   # 这种下标运算符可以用来访问列表、元组、字符串中的元素。
print('列表下标' ,[1, 2, 3, 'four', 5][3])   # 'four'
print('字符串切片' ,'hello world'[2:5])        # 'llo'

# 3. 指数 ：**  
   # 这种运算符可以用来计算幂。 
print('指数运算' ,2 ** 3)          # 2 ** 3 计算2的3次方。


# 4. 按位取反、正号、负号（一元运算符）： ~ + -
     # 例：~a 计算a的按位取反。 -b 计算b的负数。
print('按位取反' ,~10)             # -11
print('负号运算' ,-(5-3))          # -2
print('取反运算' ,~ -9)             # 8
  # 取反通用公式： ~x = -x - 1


# 5. 乘、除、地板除、取模运算： *  /  //   %
print('乘除运算' ,10 // 3)         # 3      地板除, 整除
print('取模运算' ,10 % 3)          # 1      取模运算 ，取余
print('乘法运算' ,2 * 3)           # 6
print('除法运算' ,10 / 3)          # 3.3333333333333335


# 6. 加、减运算： +  -


# 4. 位移 << >>   
# 适用场景：需要高效计算 2 的幂次乘除法时。位操作、掩码处理、底层编程时。
# 不要滥用位移运算代替乘除法，除非有明确的性能优化需求，否则可读性会降低。
print('位移运算' ,10 << 2)         # 40
print('位移运算' ,10 >> 2)         # 2


# 5. 位与运算 &   
# 适用场景：需要对二进制位进行操作时。
# 例：判断奇偶数，判断某位是否为1。
print('位与运算' ,5 & 3)           # 1


# 7. 位异或运算 ^
# 适用场景：需要对二进制位进行操作时。
# 例：交换两个变量的值。
print('位异或运算' ,5 ^ 3)          # 6


# 8. 位或运算 |
# 适用场景：需要对二进制位进行操作时。
# 例：设置某位为1。
print('位或运算' ,5 | 3)           # 7



# 9. 比较运算符： < > <= >= ==!=
print('比较运算符' ,10 > 5)         # True
print('比较运算符' ,10 == 5)        # False
print('比较运算符' ,'hello' == 'world')   # False


# 10. 身份运算符： is is not
# 适用场景：判断两个变量是否指向同一个对象。
# 例：判断两个变量是否指向同一个列表。
# 判断对象是否为一个类的实例 使用 isinstance() 函数。
a = [1, 2, 3]
b = a
print('身份运算符' ,a is b)        # True
print('身份运算符' ,a is not b)     # False



# 11. 成员运算符： in   not in
# 适用场景：判断元素是否存在于列表、元组、字符串中。
print('成员运算符' ,1 in [1, 2, 3])   # True
print('成员运算符' ,'h' in 'hello')   # True
print('成员运算符' ,'w' not in 'hello')   # True

# 12. 逻辑运算符： not and or         优先级，not > and > or
# 适用场景：进行逻辑判断。
print('逻辑运算符' ,not True)       # False
print('逻辑运算符' ,True and False)  # False
print('逻辑运算符' ,True or False)   # True



# 赋值运算符
# 变量 = 表达式
# 变量 += 表达式
# 变量 -= 表达式
# 变量 *= 表达式
# 变量 /= 表达式
# 变量 %= 表达式
# 变量 &= 表达式
# 变量 |= 表达式
# 变量 ^= 表达式
# 变量 <<= 表达式
# 变量 >>= 表达式
# 变量 **= 表达式
